package com.frog.service.friend.service.friendList;


import com.frog.service.friend.model.PageFriendListRespModel;
import com.frog.service.friend.model.PageFriendReqModel;
import com.frog.service.friend.page.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * friendList
 */
public interface AbstractFriendListStrategy {


    // 查询friendList好友缓存

    /**
     * 分页查询
     */
    List<String> list(String userId, long startRow, long endRow);

    long total(String userId);

    /**
     * 模板方法
     */
    default PageFriendListRespModel<String> getFriendList(PageFriendReqModel pageFriendReqModel) {
        // 检验传参
        PageFriendListRespModel<String> pageListResp = new PageFriendListRespModel<String>();
        if (pageFriendReqModel == null || pageFriendReqModel.verify()) return pageListResp;
        // 计算分页索引
        PageFriendReqModel.PageModel page = pageFriendReqModel.calculateStartAndEndRow();
        long startRow = page.getStartRow();
        long endRow = page.getEndRow();
        // 转换用户信息
        Integer userId = pageFriendReqModel.getUserId();
        String userIdStr = String.valueOf(userId);
        // 分页获取缓存
        List<String> friendUserIds = list(userIdStr, startRow, endRow);
        // 获取总记录数
        long total = total(userIdStr);
        // 分页
        PageInfo<String> pageInfo = new PageInfo<>(friendUserIds, pageFriendReqModel.getPage(), pageFriendReqModel.getPageSize(), total);
        pageListResp = new PageFriendListRespModel<>(pageInfo);
        // 返回结果集
        return pageListResp;
    }


    // 同步friendList好友缓存

    /**
     * 批量删除
     */
    long zrem(String userId, String... members);

    /**
     * 添加数据
     */
    long zadd(String userId, Map<String, Double> scoreMembers);


}
